package process

import (
	utils "chatOnline/client/uitls"
	"chatOnline/common/message"
	"encoding/json"
	"fmt"
	"net"
	"os"
)

type server struct {
}

// 显示登录成功后的界面

func showMenu() {
	fmt.Println("-------恭喜用户登录成功--------")
	fmt.Println("-------1. 显示在线用户列表-------")
	fmt.Println("------ 2. 发送消息--------")
	fmt.Println("-------3.私聊-------------")
	fmt.Println("-------4.上传文件-------------")
	fmt.Println("-------5. 信息列表--------")
	fmt.Println("-------6. 退出系统--------")
	fmt.Println("-------请选择（1-4）--------")

	var key int
	// 因为我们一定会使用到SmsProcess 实例，因此我们将其定义在switch 外部
	smsProcess := &SmsProcess{}
	fmt.Scanf("%d\n", &key)
	var distId int
	switch key {
	case 1:
		outputOnlinerUser()
	case 2:
		fmt.Println("你想对大家说点什么")
		smsProcess.sendGroupMes(chatMessage())
	case 3:
		outputOnlinerUser()
		fmt.Println("请输入你想私聊的id")
		fmt.Scanln(&distId)
		fmt.Println("请输入私聊内容")
		smsProcess.sendDirectMes(chatMessage(), distId)

	case 4:
		action := &Action{}
		action.FileUpLoad()
	case 5:
		fmt.Println("信息列表")
	case 6:
		fmt.Println("你选择退出了系统")
		os.Exit(0)
	default:
		fmt.Println("你输入的选项不正确")

	}
}

// 和服务器端保持通讯
func serverProcessMes(conn net.Conn) {
	// 创建一个transfer实例，不停的读取服务器发送的消息
	tf := &utils.Transfer{
		Conn: conn,
	}
	for true {
		fmt.Println("客户端正在等待读取服务器发送的消息")
		mes, err := tf.ReadPkg()
		if err != nil {
			fmt.Println("tf.ReadPkg err=", err)
			return
		}

		switch mes.Type {
		case message.NotifyUserStatusMesType: // 有人上线了
			//1. 取出NotifyUserStatusMes
			var notifyUserStatusMes message.NotifyUserStatusMes
			json.Unmarshal([]byte(mes.Data), &notifyUserStatusMes)
			// 2. 把这个用户的信息 状态保存到客户map[int]  中
			updateUserStatus(&notifyUserStatusMes)
			// 处理
		case message.SmsMesType: // 有人群发消息
			outputGroupMes(&mes)
		case message.SmsMesSingeType:
			outputGroupMes(&mes)

		default:
			fmt.Println("服务器返回了未知消息类型")
		}

	}
}
